LINQ to Entities হল LINQ (Language Integrated Query) এর একটি বিশেষ প্রকার, যা Entity Framework (EF) ব্যবহার করে ডেটাবেসের সাথে কাজ করার জন্য ডিজাইন করা হয়েছে। এটি আপনাকে .NET এ ডেটাবেসে সংরক্ষিত ডেটার উপর প্রশ্ন করতে এবং এটি সহজেই ম্যানিপুলেট করতে সাহায্য করে, তবে SQL কোড লেখার প্রয়োজন হয় না। LINQ to Entities ব্যবহার করে আপনি ডেটাবেসের টেবিলগুলোর উপর কুয়েরি করতে পারেন, যা Entity Framework দ্বারা মডেল করা হয়েছে।
Entity Framework (EF) হল একটি Object-Relational Mapping (ORM) ফ্রেমওয়ার্ক, যা আপনাকে ডেটাবেসের রিলেশনাল তথ্যকে অবজেক্ট ও ক্লাসের রূপে পরিণত করতে সহায়তা করে। EF এর মাধ্যমে, আপনি LINQ কুয়েরি ব্যবহার করে ডেটাবেসের তথ্য গ্রহণ এবং ম্যানিপুলেট করতে পারেন, এটি SQL কোড লেখার প্রয়োজন ছাড়াই।
LINQ to Entities EF এর উপরে কাজ করে এবং ডেটাবেসের টেবিলগুলিকে সি# ক্লাস হিসেবে প্রজেক্ট করে, যাতে আপনি LINQ কুয়েরি ব্যবহার করতে পারেন।
Select
, Insert
, Update
, এবং Delete
সম্পাদন করতে সাহায্য করে।LINQ to Entities ব্যবহার করার জন্য প্রথমে Entity Framework মডেল তৈরি করতে হয়, যেটি ডেটাবেস টেবিলের সাথে সম্পর্কিত ক্লাস এবং ডেটাবেসের কাঠামো নির্ধারণ করে।
ধরা যাক, আপনার একটি ডেটাবেসে Employees
নামের একটি টেবিল আছে এবং আপনি Employees
টেবিল থেকে সমস্ত কর্মীর নাম এবং বয়স প্রিন্ট করতে চান। Entity Framework এবং LINQ to Entities ব্যবহার করে এটি করা যেতে পারে।
using (var context = new MyDbContext())
{
var employees = from emp in context.Employees
select new { emp.Name, emp.Age };
foreach (var employee in employees)
{
Console.WriteLine($"Name: {employee.Name}, Age: {employee.Age}");
}
}
এখানে:
context.Employees
হল Entity Framework এর মাধ্যমে ডেটাবেসের Employees
টেবিলের প্রতিনিধিত্ব।from emp in context.Employees
কুয়েরি লেখার মাধ্যমে আমরা ডেটাবেস থেকে সমস্ত কর্মী নির্বাচন করছি।select new { emp.Name, emp.Age }
ব্যবহার করে শুধুমাত্র কর্মীর নাম এবং বয়স নির্বাচন করা হচ্ছে।LINQ to Entities ব্যবহার করে ডেটাবেসে ডেটা আপডেট, ডিলিট এবং ইনসার্ট করা অত্যন্ত সহজ। আপনি যেভাবে LINQ কুয়েরি ব্যবহার করেন, ঠিক তেমনিভাবে Entity Framework এ অবজেক্ট তৈরি করে ডেটাবেসে তা আপডেট বা ম্যানিপুলেট করতে পারেন।
নতুন ডেটা ইনসার্ট করতে LINQ to Entities এর Add
মেথড ব্যবহার করা হয়।
using (var context = new MyDbContext())
{
var newEmployee = new Employee
{
Name = "John Doe",
Age = 30,
Position = "Software Engineer"
};
context.Employees.Add(newEmployee);
context.SaveChanges(); // Changes are saved to the database
}
এখানে:
Employee
অবজেক্ট তৈরি করা হয়েছে।context.Employees.Add(newEmployee)
এর মাধ্যমে ডেটাবেসে নতুন রেকর্ড ইনসার্ট করা হয়েছে।context.SaveChanges()
মেথড ব্যবহার করে ডেটাবেসে পরিবর্তনগুলো সেভ করা হয়েছে।ডেটাবেসে বিদ্যমান ডেটা আপডেট করতে, প্রথমে সংশ্লিষ্ট রেকর্ডটি খুঁজে বের করতে হয় এবং তারপর তা আপডেট করা হয়।
using (var context = new MyDbContext())
{
var employeeToUpdate = context.Employees
.FirstOrDefault(e => e.Name == "John Doe");
if (employeeToUpdate != null)
{
employeeToUpdate.Age = 31; // Updating the age
context.SaveChanges(); // Save changes to database
}
}
এখানে:
FirstOrDefault()
মেথডের মাধ্যমে Name
এর মাধ্যমে প্রথম মিলে যাওয়া Employee
রেকর্ডটি খুঁজে বের করা হয়েছে।Age
আপডেট করা হয়েছে এবং SaveChanges()
মেথড ব্যবহার করে ডেটাবেসে সেভ করা হয়েছে।ডেটাবেস থেকে রেকর্ড মুছে ফেলতে LINQ to Entities এর Remove
মেথড ব্যবহার করা হয়।
using (var context = new MyDbContext())
{
var employeeToDelete = context.Employees
.FirstOrDefault(e => e.Name == "John Doe");
if (employeeToDelete != null)
{
context.Employees.Remove(employeeToDelete); // Remove the employee
context.SaveChanges(); // Save changes to database
}
}
এখানে:
FirstOrDefault()
মেথডের মাধ্যমে মুছে ফেলার জন্য প্রথম মেলে এমন Employee
রেকর্ডটি খুঁজে বের করা হয়েছে।Remove()
মেথড দিয়ে রেকর্ডটি মুছে ফেলা হয়েছে এবং SaveChanges()
মেথড দিয়ে পরিবর্তন সেভ করা হয়েছে।LINQ to Entities আপনাকে Entity Framework এর সাহায্যে ডেটাবেসে কুয়েরি করার ক্ষমতা প্রদান করে, যাতে SQL কোড না লিখে সহজে ডেটাবেস অপারেশন করা যায়। LINQ কুয়েরি ব্যবহার করে আপনি ডেটা ইনসার্ট, আপডেট এবং ডিলিট করতে পারেন, যা ডেটাবেসের সাথে সম্পর্কিত অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত কার্যকরী। LINQ to Entities এর মাধ্যমে ডেটাবেসের সাথে কাজ করা অনেক সহজ এবং কোডের পড়তে সহজ হয়।
Entity Framework (EF) এবং LINQ (Language Integrated Query) দুটি গুরুত্বপূর্ণ টুল এবং কৌশল যা ডেভেলপারদের ডেটাবেসের সাথে যোগাযোগ করতে সাহায্য করে। তবে তাদের কাজের ধরন এবং ব্যবহারের ক্ষেত্রে কিছু মৌলিক পার্থক্য রয়েছে।
Entity Framework (EF) হল একটি Object-Relational Mapping (ORM) ফ্রেমওয়ার্ক যা .NET অ্যাপ্লিকেশনগুলির জন্য ডেটাবেসের সাথে যোগাযোগকে সরল করে। এটি ডেভেলপারদের SQL কোড না লিখেই ডেটাবেসের সাথে কাজ করার সুবিধা প্রদান করে, কারণ এটি data models (entities) এবং tables এর মধ্যে সম্পর্ক তৈরি করে।
EF-এর মাধ্যমে, ডেভেলপাররা ডেটাবেসের টেবিলগুলির জন্য ক্লাস তৈরি করতে পারেন, এবং তারপর সেই ক্লাসের মাধ্যমে ডেটা অ্যাক্সেস, ইনসার্ট, আপডেট, ডিলিট এবং রিড অপারেশন করতে পারেন। EF ৩টি প্রধানভাবে ব্যবহৃত পদ্ধতিতে কাজ করে:
EF আপনাকে ডেটাবেস টেবিলের জন্য ক্লাস তৈরি করে, এবং সেই ক্লাসের মাধ্যমে ডেটাবেসের সব অপারেশন পরিচালনা করতে দেয়।
LINQ হল একটি কোড ভাষায় সমর্থিত কুয়েরি লেখার কৌশল যা ডেভেলপারদের ডেটা কুয়েরি, ফিল্টার, সাজানো, এবং গ্রুপিং করার জন্য সমর্থন প্রদান করে। এটি C# বা VB.NET-এ ডেটাবেস, XML, এবং অন্যান্য ডেটা সোর্সের ওপর কুয়েরি চালাতে ব্যবহার করা হয়। LINQ-এ সাধারণত C# কোডের মধ্যে SQL-like কুয়েরি সঠিকভাবে রচনা করা যায়, যা ডেটা ফিল্টার এবং প্রসেসিং সহজ করে।
Entity Framework এবং LINQ একে অপরের সাথে গভীরভাবে যুক্ত, কারণ EF এর মাধ্যমে ডেটাবেসের ডেটার উপর কাজ করার সময় আপনি LINQ কুয়েরি ব্যবহার করতে পারেন। EF টেবিলগুলির entity class তৈরি করে, এবং LINQ ব্যবহার করে আপনি সেই ক্লাসের উপর কুয়েরি চালাতে পারেন।
এখানে LINQ to Entities নামে একটি বৈশিষ্ট্য রয়েছে যা Entity Framework-এর সাথে একত্রিতভাবে কাজ করে, যাতে আপনি EF ক্লাসের উপর LINQ কুয়েরি চালাতে পারেন।
LINQ to Entities হল LINQ-এর একটি কৌশল যা Entity Framework এর সঙ্গে কাজ করে। এটি ডেটাবেসে সংরক্ষিত entities (যেমন, টেবিলের রেকর্ড) এর সাথে LINQ কুয়েরি ব্যবহার করার সুযোগ দেয়। এতে আপনি SQL কোড না লিখে সরাসরি C# কোড-এ LINQ কুয়েরি ব্যবহার করতে পারেন।
ধরা যাক, আমাদের একটি Customers টেবিল এবং Orders টেবিল রয়েছে, এবং আমরা LINQ to Entities ব্যবহার করে কিছু ডেটা রিট্রাইভ করতে চাই।
public class Customer
{
public int CustomerID { get; set; }
public string CustomerName { get; set; }
public string Email { get; set; }
}
public class Order
{
public int OrderID { get; set; }
public int CustomerID { get; set; }
public string OrderAmount { get; set; }
public virtual Customer Customer { get; set; }
}
এখানে, Customer এবং Order ক্লাসগুলো Entity Framework ব্যবহার করে টেবিলের প্রতিনিধিত্ব করে।
using (var context = new MyDataContext())
{
var customersWithOrders = from customer in context.Customers
join order in context.Orders on customer.CustomerID equals order.CustomerID
select new
{
customer.CustomerName,
customer.Email,
order.OrderAmount
};
foreach (var item in customersWithOrders)
{
Console.WriteLine($"Customer: {item.CustomerName}, Email: {item.Email}, Order Amount: {item.OrderAmount}");
}
}
এখানে, LINQ to Entities ব্যবহার করে Customers এবং Orders টেবিলের ডেটা join করা হয়েছে এবং select ক্লজ দিয়ে প্রয়োজনীয় তথ্য রিটার্ন করা হয়েছে। এটি ডাটাবেসে সোজা SQL Query হিসেবে রূপান্তরিত হবে।
Entity Framework LINQ-এর মাধ্যমে ডেটাবেসের বিভিন্ন অপারেশন (CRUD) করতে সহায়তা করে। নিম্নলিখিত প্রতিটি অপারেশনের উদাহরণ দেওয়া হল:
using (var context = new MyDataContext())
{
var newCustomer = new Customer
{
CustomerName = "Alice",
Email = "alice@example.com"
};
context.Customers.Add(newCustomer);
context.SaveChanges();
}
এখানে, SaveChanges() মেথড ব্যবহার করে Customers টেবিলে নতুন রেকর্ড ইনসার্ট করা হয়েছে।
using (var context = new MyDataContext())
{
var customers = from customer in context.Customers
where customer.CustomerName.StartsWith("A")
select customer;
foreach (var customer in customers)
{
Console.WriteLine($"Customer: {customer.CustomerName}, Email: {customer.Email}");
}
}
এখানে, LINQ Query ব্যবহার করে CustomerName "A"-এর শুরু হওয়া গ্রাহকদের তথ্য রিট্রাইভ করা হয়েছে।
using (var context = new MyDataContext())
{
var customer = context.Customers.SingleOrDefault(c => c.CustomerID == 1);
if (customer != null)
{
customer.Email = "newemail@example.com";
context.SaveChanges();
}
}
এখানে, CustomerID 1 এর গ্রাহকটি খুঁজে বের করা হয়েছে এবং তার ইমেইল আপডেট করা হয়েছে।
using (var context = new MyDataContext())
{
var customer = context.Customers.SingleOrDefault(c => c.CustomerID == 1);
if (customer != null)
{
context.Customers.Remove(customer);
context.SaveChanges();
}
}
এখানে, CustomerID 1 এর গ্রাহকটি খুঁজে বের করে, সেটি ডিলিট করা হয়েছে।
Entity Framework এবং LINQ একত্রে ব্যবহার করলে ডেটাবেসের সাথে কাজ করার প্রক্রিয়া সহজ, দ্রুত, এবং কার্যকরী হয়ে ওঠে। EF ডেটাবেসের সাথে যোগাযোগের জন্য ORM পদ্ধতি ব্যবহার করে, যেখানে LINQ কোডে SQL কুয়েরি লেখার সুবিধা দেয়।
DbContext এবং Model হল Entity Framework এর দুটি গুরুত্বপূর্ণ উপাদান, যা ডেটাবেসে ডেটা অ্যাক্সেস করতে ব্যবহৃত হয়। DbContext ক্লাসটি ডেটাবেসের সাথে যোগাযোগের জন্য এবং Model ক্লাসগুলি ডেটাবেসের টেবিলগুলির প্রতিনিধিত্ব করে।
DbContext হল Entity Framework এর মূল ক্লাস, যা ডেটাবেসের টেবিলের সাথে যোগাযোগের মাধ্যম হিসেবে কাজ করে। এই ক্লাসটি ডেটাবেসের সাথে CRUD (Create, Read, Update, Delete) অপারেশন পরিচালনা করতে ব্যবহৃত হয় এবং এটি DbSet প্রপার্টি ব্যবহার করে টেবিলের ডেটার সাথে কাজ করে।
DbContext ক্লাসের মাধ্যমে, আপনি LINQ কুয়েরি ব্যবহার করতে পারেন, ডেটাবেসে নতুন রেকর্ড যুক্ত করতে পারেন, এবং ডেটাবেসের তথ্য আপডেট বা মুছে ফেলতে পারেন।
প্রথমে, একটি DbContext ক্লাস তৈরি করতে হবে যা আপনার ডেটাবেসের সাথে সংযোগ স্থাপন করবে এবং ডেটাবেসের টেবিলগুলোকে DbSet প্রপার্টির মাধ্যমে ব্যবহার করবে।
public class ApplicationDbContext : DbContext
{
public DbSet<Student> Students { get; set; }
public DbSet<Course> Courses { get; set; }
public ApplicationDbContext(string connectionString) : base(connectionString) { }
}
এখানে Students
এবং Courses
হলো ডেটাবেসের টেবিল এবং DbSet এবং DbSet এই টেবিলের ডেটা অ্যাক্সেস করতে ব্যবহৃত হবে। ApplicationDbContext
ক্লাসটি ডেটাবেসের সাথে কাজ করার জন্য ব্যবহৃত হয়।
Model ক্লাসগুলো Entity Framework-এ ডেটাবেসের টেবিলগুলোর প্রতিনিধিত্ব করে। প্রতিটি Model ক্লাস একটি ডেটাবেস টেবিলের সারি (row) এবং ফিল্ড (column)-এর মতো হতে পারে। এগুলো সাধারণত POCO (Plain Old CLR Object) ক্লাস হিসেবে তৈরি করা হয়, যার মধ্যে প্রপার্টি থাকে যা টেবিলের কলামগুলোর সাথে ম্যাচ করে।
এখন, প্রতিটি টেবিলের জন্য একটি Model ক্লাস তৈরি করতে হবে। উদাহরণস্বরূপ, একটি Student
এবং একটি Course
মডেল তৈরি করা যেতে পারে।
public class Student
{
public int StudentID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class Course
{
public int CourseID { get; set; }
public string CourseName { get; set; }
}
এখানে Student
ক্লাসটি একটি ছাত্রের তথ্য ধারণ করে এবং Course
ক্লাসটি কোর্সের তথ্য ধারণ করে।
DbContext এবং Model ক্লাস ব্যবহার করে আপনি ডেটাবেসে CRUD অপারেশন করতে পারবেন। উদাহরণস্বরূপ, ডেটাবেসে একটি নতুন ছাত্র যোগ করা এবং সমস্ত ছাত্রের তালিকা পড়া:
using (var context = new ApplicationDbContext("your_connection_string"))
{
// Insert operation
var newStudent = new Student { Name = "John", Age = 20 };
context.Students.Add(newStudent);
context.SaveChanges(); // Changes to the database
// Read operation
var students = context.Students.ToList();
foreach (var student in students)
{
Console.WriteLine($"Name: {student.Name}, Age: {student.Age}");
}
}
এখানে, ApplicationDbContext
এর মাধ্যমে ডেটাবেসের সাথে যোগাযোগ করা হচ্ছে এবং Students টেবিলের নতুন ডেটা ইনসার্ট করা হচ্ছে। এছাড়া, Students
টেবিলের সব রেকর্ড পড়া হচ্ছে এবং কনসোলে আউটপুট দেখানো হচ্ছে।
DbContext হল আপনার ডেটাবেসের সাথে যোগাযোগের মাধ্যম, যেখানে Model ক্লাসগুলো ডেটাবেসের টেবিলের প্রতিনিধিত্ব করে। DbContext এর DbSet প্রপার্টি গুলি ব্যবহৃত হয় টেবিলের ডেটার উপর অপারেশন করার জন্য।
এভাবে DbContext এবং Model একসাথে ব্যবহার করে আপনি Entity Framework-এর মাধ্যমে ডেটাবেসের বিভিন্ন কার্যক্রম সম্পাদন করতে পারেন, যেমন:
LINQ (Language Integrated Query) .NET প্ল্যাটফর্মে ডেটা ম্যানিপুলেশনের জন্য একটি শক্তিশালী টুল, যা ডেটাকে ফেচ এবং ম্যানিপুলেট করতে সহায়ক। LINQ এর মাধ্যমে আপনি শুধুমাত্র ডেটা অনুসন্ধানই করতে পারেন না, বরং সেই ডেটা পরিবর্তন, ফিল্টার, গ্রুপ, সাজানো (sorting), গ্রুপিং, অ্যাগ্রিগেট করা এবং অন্যান্য ম্যানিপুলেশন করতে পারেন। LINQ ব্যবহার করে Entity Framework বা অন্যান্য ডেটাবেস থেকেও ডেটা ম্যানিপুলেট করা যায়।
এখানে LINQ ব্যবহার করে ডেটা ফেচ এবং ম্যানিপুলেশন এর কিছু গুরুত্বপূর্ণ ধারণা এবং উদাহরণ দেওয়া হলো।
LINQ তে Query Syntax ব্যবহার করলে SQL স্টাইলে কোয়েরি লেখা যায়, যা অনেকটা SQL কোডের মতো। এই সিনট্যাক্সটি ডেটা ফেচ করার জন্য এবং সেটি ম্যানিপুলেট করার জন্য ব্যবহৃত হয়।
using (var context = new ApplicationDbContext())
{
// ডেটা ফেচ এবং ফিল্টার করা
var query = from person in context.People
where person.Age > 30
orderby person.Name ascending
select person;
foreach (var person in query)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
এখানে, Query Syntax ব্যবহার করে context.People
টেবিল থেকে Age > 30 শর্তে ডেটা ফেচ করা হয়েছে এবং সাজানো হয়েছে Name অনুসারে।
LINQ তে Method Syntax ব্যবহার করলে Where()
, Select()
, OrderBy()
, GroupBy()
ইত্যাদি মেথড দিয়ে ডেটা ম্যানিপুলেট করা যায়। এটি Lambda Expressions ব্যবহার করে কোয়েরি তৈরির একটি পদ্ধতি।
using (var context = new ApplicationDbContext())
{
// Method Syntax ব্যবহার করে ডেটা ফেচ এবং ফিল্টার করা
var query = context.People
.Where(p => p.Age > 30)
.OrderBy(p => p.Name)
.ToList();
foreach (var person in query)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
এখানে, Method Syntax ব্যবহার করা হয়েছে যেখানে Where() মেথড দিয়ে ৩০ এর বেশি বয়সের লোকদের ফিল্টার করা হয়েছে এবং OrderBy() দিয়ে সাজানো হয়েছে।
LINQ এর মাধ্যমে আপনি ডেটা ম্যানিপুলেশন যেমন, ফিল্টারিং, গ্রুপিং, অ্যাগ্রিগেটিং, মডিফাইং ইত্যাদি কার্য সম্পাদন করতে পারেন।
Where()
মেথড ব্যবহার করে আপনি নির্দিষ্ট শর্ত অনুযায়ী ডেটা ফিল্টার করতে পারেন।
using (var context = new ApplicationDbContext())
{
var adults = context.People
.Where(p => p.Age >= 18)
.ToList();
foreach (var person in adults)
{
Console.WriteLine($"Adult: {person.Name}, Age: {person.Age}");
}
}
এখানে, Where() মেথড ব্যবহার করে Age >= 18
শর্তে ফিল্টার করা হয়েছে এবং শুধু বড়দের নাম প্রিন্ট করা হয়েছে।
LINQ তে GroupBy() ব্যবহার করে আপনি ডেটাকে গ্রুপ করতে পারেন। উদাহরণস্বরূপ, ডেটাকে বিভাগ (Department) বা বয়সের উপর ভিত্তি করে গ্রুপ করা।
using (var context = new ApplicationDbContext())
{
var groupedByDepartment = context.People
.GroupBy(p => p.Department)
.Select(g => new
{
Department = g.Key,
People = g.ToList()
});
foreach (var group in groupedByDepartment)
{
Console.WriteLine($"Department: {group.Department}");
foreach (var person in group.People)
{
Console.WriteLine($" Name: {person.Name}, Age: {person.Age}");
}
}
}
এখানে, GroupBy() মেথড ব্যবহার করে Department
অনুসারে গ্রুপ করা হয়েছে এবং প্রতিটি গ্রুপের সদস্যদের নাম ও বয়স প্রিন্ট করা হয়েছে।
LINQ তে Sum(), Count(), Average(), Min(), Max() মেথড ব্যবহার করে ডেটার উপর অ্যাগ্রিগেশন অপারেশন করা যায়।
using (var context = new ApplicationDbContext())
{
var totalAge = context.People
.Where(p => p.Age > 18)
.Sum(p => p.Age);
Console.WriteLine($"Total Age of Adults: {totalAge}");
}
এখানে, Sum() মেথড ব্যবহার করে Age
এর যোগফল বের করা হয়েছে যাদের বয়স ১৮ এর বেশি।
LINQ তে OrderBy() এবং OrderByDescending() ব্যবহার করে ডেটা সাজানো যায়।
using (var context = new ApplicationDbContext())
{
var sortedByAge = context.People
.OrderBy(p => p.Age) // Ascending order
.ToList();
foreach (var person in sortedByAge)
{
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
}
}
এখানে, OrderBy() মেথড ব্যবহার করে Age এর ভিত্তিতে ডেটা সাজানো হয়েছে (Ascending Order)।
FirstOrDefault()
বা SingleOrDefault()
মেথড ব্যবহার করে আপনি প্রথম বা একক রেকর্ড ফেচ করতে পারেন।
using (var context = new ApplicationDbContext())
{
var person = context.People
.FirstOrDefault(p => p.Name == "Alice");
if (person != null)
{
Console.WriteLine($"Found: {person.Name}, Age: {person.Age}");
}
}
এখানে, FirstOrDefault() মেথড ব্যবহার করে "Alice" নামের প্রথম রেকর্ডটি ফেচ করা হয়েছে।
LINQ এর মাধ্যমে ডেটা ফেচ করার পাশাপাশি, Entity Framework ব্যবহার করে ডেটা আপডেট (update) এবং মুছে ফেলা (delete) করা যেতে পারে।
using (var context = new ApplicationDbContext())
{
var person = context.People
.FirstOrDefault(p => p.Name == "Alice");
if (person != null)
{
person.Age = 26; // Age আপডেট করা
context.SaveChanges(); // পরিবর্তন সেভ করা
}
}
এখানে, "Alice" নামের ব্যক্তির বয়স আপডেট করা হয়েছে এবং SaveChanges()
এর মাধ্যমে পরিবর্তন সেভ করা হয়েছে।
using (var context = new ApplicationDbContext())
{
var person = context.People
.FirstOrDefault(p => p.Name == "Bob");
if (person != null)
{
context.People.Remove(person); // ডেটা মুছে ফেলা
context.SaveChanges(); // পরিবর্তন সেভ করা
}
}
এখানে, "Bob" নামের ব্যক্তির রেকর্ড মুছে ফেলা হয়েছে।
LINQ একটি শক্তিশালী এবং সহজ পদ্ধতি যা ডেটাকে ফেচ এবং ম্যানিপুলেট করার জন্য ব্যবহৃত হয়। LINQ এর মাধ্যমে ডেটা ফেচ, ফিল্টার, গ্রুপিং, অ্যাগ্রিগেশন, সাজানো, এবং আপডেট করা সহজ এবং প্রাকৃতিকভাবে করা সম্ভব। Entity Framework এর সাহায্যে আপনি LINQ ব্যবহার করে ডাটাবেস থেকে ডেটা ফেচ এবং ম্যানিপুলেট করতে পারেন। LINQ এর Method Syntax এবং Query Syntax উভয়ই ডেটা ম্যানিপুলেশনের জন্য সহায়ক।
LINQ (Language Integrated Query) এর মাধ্যমে আপনি complex queries করতে পারেন এবং navigation properties ব্যবহার করে relational data সম্পর্কিত তথ্য পরিচালনা করতে পারেন। এর মাধ্যমে আপনি বিভিন্ন টেবিল বা ক্লাসের মধ্যে সম্পর্ক (relationships) খুঁজে বের করতে পারেন এবং প্রাসঙ্গিক ডেটা একত্রিত করতে পারেন।
LINQ তে complex queries বলতে বোঝানো হয় একাধিক শর্তের মধ্যে তথ্য অনুসন্ধান, বিভিন্ন অপারেশন একত্রে ব্যবহার করা, বা ডেটা ফিল্টারিং, গ্রুপিং এবং অর্ডারিং একত্রে করা। LINQ তে complex queries তৈরি করতে সাধারণত from
, where
, select
, group by
, order by
, join
, let
ইত্যাদি কিওয়ার্ড ব্যবহার করা হয়।
ধরা যাক, আমাদের দুটি তালিকা রয়েছে — একটিতে Employee
ক্লাসের তথ্য এবং অন্যটিতে Department
ক্লাসের তথ্য। এখন, আমরা কর্মীদের তথ্য ডিপার্টমেন্টের নামে সাজিয়ে দেখব।
public class Employee
{
public string Name { get; set; }
public int Age { get; set; }
public int DepartmentId { get; set; }
}
public class Department
{
public int DepartmentId { get; set; }
public string DepartmentName { get; set; }
}
List<Employee> employees = new List<Employee>
{
new Employee { Name = "Alice", Age = 30, DepartmentId = 1 },
new Employee { Name = "Bob", Age = 25, DepartmentId = 2 },
new Employee { Name = "Charlie", Age = 35, DepartmentId = 1 }
};
List<Department> departments = new List<Department>
{
new Department { DepartmentId = 1, DepartmentName = "HR" },
new Department { DepartmentId = 2, DepartmentName = "IT" }
};
// Complex query: Join Employee এবং Department ক্লাসের ডেটা
var query = from emp in employees
join dept in departments on emp.DepartmentId equals dept.DepartmentId
orderby dept.DepartmentName
select new { emp.Name, emp.Age, dept.DepartmentName };
foreach (var item in query)
{
Console.WriteLine($"Name: {item.Name}, Age: {item.Age}, Department: {item.DepartmentName}");
}
এখানে:
join
কিওয়ার্ড ব্যবহার করে Employee
এবং Department
ক্লাসের মধ্যে সম্পর্ক স্থাপন করা হয়েছে।orderby
দ্বারা ডিপার্টমেন্টের নাম অনুযায়ী কর্মীদের সাজানো হয়েছে।আউটপুট:
Name: Alice, Age: 30, Department: HR
Name: Charlie, Age: 35, Department: HR
Name: Bob, Age: 25, Department: IT
এটি একটি complex query উদাহরণ যেখানে একাধিক শর্তের মধ্যে ডেটা সংগ্রহ করা হয়েছে এবং বিভিন্ন অপারেশন একত্রে ব্যবহার করা হয়েছে।
Navigation properties একটি ORM (Object-Relational Mapping) সিস্টেমের মাধ্যমে এক ক্লাস বা টেবিলের মধ্যে সম্পর্কিত অন্যান্য ক্লাস বা টেবিলের তথ্য প্রদর্শন করতে ব্যবহৃত হয়। Entity Framework (EF) Core এর মাধ্যমে, আপনি navigation properties ব্যবহার করে একটি ক্লাসের মধ্যে সম্পর্কিত অন্য ক্লাসের ডেটা রিট্রিভ করতে পারেন।
ধরা যাক, আমাদের একটি Student
এবং Course
ক্লাস আছে এবং আমরা জানি যে, এক ছাত্র একাধিক কোর্সে ভর্তি হতে পারে। এখানে Student
এবং Course
এর মধ্যে one-to-many relationship রয়েছে।
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public List<Course> Courses { get; set; } // Navigation property
}
public class Course
{
public int CourseId { get; set; }
public string CourseName { get; set; }
public int StudentId { get; set; }
public Student Student { get; set; } // Navigation property
}
List<Student> students = new List<Student>
{
new Student { StudentId = 1, Name = "Alice", Courses = new List<Course> {
new Course { CourseId = 1, CourseName = "Math" },
new Course { CourseId = 2, CourseName = "English" }
}},
new Student { StudentId = 2, Name = "Bob", Courses = new List<Course> {
new Course { CourseId = 3, CourseName = "Physics" },
new Course { CourseId = 4, CourseName = "Chemistry" }
}}
};
// Navigation property ব্যবহার করে Student এর Courses দেখতে হবে
var query = from student in students
select new
{
student.Name,
Courses = student.Courses.Select(c => c.CourseName)
};
foreach (var item in query)
{
Console.WriteLine($"Student: {item.Name}");
foreach (var course in item.Courses)
{
Console.WriteLine($" Course: {course}");
}
}
এখানে:
Courses
হল একটি navigation property যা Student
ক্লাসের মধ্যে সম্পর্কিত Course
ক্লাসের তথ্য ধরে রাখে।student.Courses.Select(c => c.CourseName)
ব্যবহার করে, ছাত্রদের কোর্সের নাম বের করা হচ্ছে।আউটপুট:
Student: Alice
Course: Math
Course: English
Student: Bob
Course: Physics
Course: Chemistry
এখানে Courses
প্রপার্টি Student
ক্লাসের navigation property, যা Student
এবং Course
ক্লাসের মধ্যে সম্পর্কিত তথ্য তুলে ধরছে।
Entity Framework এ One-to-Many সম্পর্কের মধ্যে Student
এবং Course
ক্লাসের মধ্যে সম্পর্ক স্থাপন করা হয়, যেখানে একটি ছাত্র একাধিক কোর্সে ভর্তি হতে পারে।
public class ApplicationDbContext : DbContext
{
public DbSet<Student> Students { get; set; }
public DbSet<Course> Courses { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasMany(s => s.Courses)
.WithOne(c => c.Student)
.HasForeignKey(c => c.StudentId);
}
}
এখানে:
HasMany(s => s.Courses)
বলে, একটি Student
এর অনেকগুলো Course
থাকতে পারে।WithOne(c => c.Student)
বলে, প্রতিটি Course
এর একটিমাত্র Student
থাকতে হবে।এখন, যদি আপনি complex query করতে চান যেখানে navigation properties ব্যবহার করা হচ্ছে, যেমন, সমস্ত ছাত্র এবং তাদের কোর্সের নাম বের করতে:
var query = from student in students
select new
{
student.Name,
Courses = student.Courses.Select(c => c.CourseName)
};
foreach (var item in query)
{
Console.WriteLine($"Student: {item.Name}");
foreach (var course in item.Courses)
{
Console.WriteLine($" Course: {course}");
}
}
এখানে, Student
এর Courses
নামক navigation property ব্যবহার করে ছাত্রদের কোর্সের নাম বের করা হয়েছে।
এটি ডেটাবেসের মধ্যে সম্পর্কিত তথ্যকে কোয়েরি করার এবং সম্পর্কিত ডেটা একত্রিত করার একটি শক্তিশালী পদ্ধতি।
common.read_more